package com.paas.form.entity;//package com.paas.form.entity;
//
//import com.paas.common.jdbc.JdbcSql;
//import com.paas.common.jdbc.ResultHandler;
//import com.paas.common.jdbc.model.DbColumn;
//import com.paas.common.jdbc.model.DbConfig;
//import com.paas.common.jdbc.model.DbResult;
//import com.paas.common.model.DataBaseEntity;
//import com.paas.common.util.AppUtil;
//import com.paas.common.util.BeanUtil;
//import com.paas.common.util.StringUtil;
//import com.paas.plus.tool.form.model.View;
//import com.paas.plus.tool.form.server.FormService;
//import com.paas.plus.tool.realTimeDistributed.model.RealTimeDistributeConfig;
//import com.paas.plus.tool.realTimeDistributed.model.RealTimeDistributeExecutionParameter;
//import com.paas.plus.tool.realTimeDistributed.server.IRealTimeDistributeServer;
//import com.publics.feign.service.IUcDataBaseService;
//
//import java.util.*;
//
//public class FormJobTaskHandler implements ResultHandler {
//    private RealTimeDistributeConfig realTimeDistributeConfig;
//
//    private String viewId;
//
//    private DbResult dbResult;
//
//    private FormService formService;
//
//    private IUcDataBaseService ucDataBaseService;
//
//    private IRealTimeDistributeServer realTimeDistributeServer;
//
//    private Map<String,String> columnMapperMap;
//
//    @Override
//    public void handleResult(Map<String, Object> data) {
//        View view = getFormService().getViewById(viewId);
//        String idField = view.getIdField();
//        String id = "";
//        HashMap<String, Object> tempMap = new HashMap<>();
//        Iterator<Map.Entry<String, Object>> iterator = data.entrySet().iterator();
//        //遍历获取执行参数map
//        while (iterator.hasNext()){
//            Map.Entry<String, Object> next = iterator.next();
//            if (columnMapperMap.containsKey(next.getKey().toLowerCase()) || columnMapperMap.containsKey(next.getKey().toUpperCase())){
//                if (StringUtil.isNotEmpty(columnMapperMap.get(next.getKey().toUpperCase()))){
//                    tempMap.put(columnMapperMap.get(next.getKey().toUpperCase()),next.getValue());
//                }else if (StringUtil.isNotEmpty(columnMapperMap.get(next.getKey().toLowerCase()))){
//                    tempMap.put(columnMapperMap.get(next.getKey().toLowerCase()),next.getValue());
//                }
//            }
//        }
//        //判断当前参数中,是否包含视图id
//        if (tempMap.containsKey(idField.toUpperCase()) || tempMap.containsKey(idField.toLowerCase())){
//            if (BeanUtil.isNotEmpty(tempMap.get(idField.toUpperCase()))){
//                id = tempMap.get(idField.toUpperCase()).toString();
//            }else {
//                id = tempMap.get(idField.toLowerCase()).toString();
//            }
//            DataBaseEntity db = getUcDataBaseService().queryJdbcById(view.getDatasourceId());
//            DbConfig config = new DbConfig(db.getJdbcDrivers(), db.getJdbcUrl(), db.getJdbcUser(), db.getJdbcPassword(),db.getDbName());
//            JdbcSql jdbcSql = new JdbcSql(config);
//            StringBuilder sqlBuilder = new StringBuilder();
//            sqlBuilder.append("select count(1) as total  from ").append(view.getLinkTable()).append(" where ").append(idField+"=").append("'");
//            sqlBuilder.append(id).append("'");
//            DbResult dbResult = jdbcSql.getSqlData(sqlBuilder.toString());
//            if (BeanUtil.isNotEmpty(dbResult.getData())){
//                List<Map<String, Object>> dbResultData = dbResult.getData();
//                int total = Integer.valueOf(dbResultData.get(0).get("TOTAL").toString());
//                String operateType = null;
//                if (total>0){
//                    operateType = "update";
//                }else {
//                    operateType = "insert";
//                }
//                //存自己库表
//                assembleAndExecuteSql(tempMap,operateType,view,id,jdbcSql);
//                RealTimeDistributeExecutionParameter realTimeDistributeExecutionParameter = new RealTimeDistributeExecutionParameter();
//                ArrayList<HashMap<String, Object>> arrayList = new ArrayList<>();
//                arrayList.add(tempMap);
//                realTimeDistributeExecutionParameter.setListMap(arrayList);
//                realTimeDistributeExecutionParameter.setPrimaryKeyField(idField);
//                realTimeDistributeExecutionParameter.setType(operateType);
//                getRealTimeDistributeServer().executeDistribute(realTimeDistributeConfig,realTimeDistributeExecutionParameter);
//            }
//        }
//    }
//
//    /**
//     * 装配并执行sql
//     * */
//    private void assembleAndExecuteSql(Map<String, Object> tempMap, String operateType, View view, String id, JdbcSql jdbcSql) {
//        StringBuilder sbColumn = new StringBuilder();
//        StringBuilder sbMapper = new StringBuilder();
//        StringBuilder executeSqlBuilder = new StringBuilder();
//        List<List<Object>> list = new ArrayList<>();
//        List<Object> objects = new ArrayList<>();
//        Iterator<Map.Entry<String, Object>> iterator = tempMap.entrySet().iterator();
//        while (iterator.hasNext()){
//            Map.Entry<String, Object> next = iterator.next();
//            Object value = null;
//            if ("insert".equals(operateType)){
//                if (StringUtil.isNullOrEmpty(sbColumn.toString())){
//                    sbColumn.append(next.getKey());
//                    sbMapper.append("?");
//                }else {
//                    sbColumn.append(",").append(next.getKey());
//                    sbMapper.append(",").append("?");
//                }
//            }else if ("update".equals(operateType)){
//                if (view.getIdField().equals(next.getKey().toUpperCase()) || view.getIdField().equals(next.getKey().toLowerCase())){
//                    continue;
//                }else {
//                    if (StringUtil.isNullOrEmpty(sbColumn.toString())){
//                        sbColumn.append(" set ").append(next.getKey()).append(" = ").append("?");
//                    }else {
//                        sbColumn.append(",").append(next.getKey()).append(" = ").append("?");
//                    }
//                }
//            }
//            value = next.getValue();
//            objects.add(value);
//        }
//        if ("insert".equals(operateType)){
//            executeSqlBuilder.append("insert into ").append(view.getLinkTable()).append("(").append(sbColumn.toString()).append(")");
//            executeSqlBuilder.append(" values ").append("(").append(sbMapper.toString()).append(")");
//        }else {
//            executeSqlBuilder.append("update  ").append(view.getLinkTable()).append("  "+sbColumn.toString());
//            executeSqlBuilder.append(" where ").append(view.getIdField()+"="+"?");
//            objects.add(id);
//        }
//        list.add(objects);
//        jdbcSql.executeBatchUpdate(executeSqlBuilder.toString(),list);
//    }
//
//    @Override
//    public void setColumns(List<DbColumn> dbColumnList) {}
//
//    public Map<String, String> getColumnMapperMap() {
//        return columnMapperMap;
//    }
//
//    public void setColumnMapperMap(Map<String, String> columnMapperMap) {
//        this.columnMapperMap = columnMapperMap;
//    }
//
//    public RealTimeDistributeConfig getRealTimeDistributeConfig() {
//        return realTimeDistributeConfig;
//    }
//
//    public void setRealTimeDistributeConfig(RealTimeDistributeConfig realTimeDistributeConfig) {
//        this.realTimeDistributeConfig = realTimeDistributeConfig;
//    }
//
//    public DbResult getDbResult() {
//        return dbResult;
//    }
//
//    public void setDbResult(DbResult dbResult) {
//        this.dbResult = dbResult;
//    }
//
//    public String getViewId() {
//        return viewId;
//    }
//
//    public void setViewId(String viewId) {
//        this.viewId = viewId;
//    }
//
//    private FormService getFormService(){
//        if (BeanUtil.isEmpty(formService)){
//            formService = (FormService) AppUtil.getBean(FormService.class);
//        }
//        return formService;
//    }
//
//    private IUcDataBaseService getUcDataBaseService(){
//        if (BeanUtil.isEmpty(ucDataBaseService)){
//            ucDataBaseService = (IUcDataBaseService) AppUtil.getBean(IUcDataBaseService.class);
//        }
//        return ucDataBaseService;
//    }
//
//    private IRealTimeDistributeServer getRealTimeDistributeServer(){
//        if (BeanUtil.isEmpty(realTimeDistributeServer)){
//            realTimeDistributeServer = (IRealTimeDistributeServer) AppUtil.getBean(IRealTimeDistributeServer.class);
//        }
//        return realTimeDistributeServer;
//    }
//}
